// https://www.lintcode.com/problem/rotate-image/my-submissions

class Solution {
public:
    /**
     * @param matrix: a lists of integers
     * @return: nothing
     */
    // 法一：从外向里一圈圈转
    // void rotate(vector<vector<int>> &matrix) {
    //     int n = matrix.size();
    //     for (int i = 0; i < n / 2; ++i)
    //     {
    //         for (int j = i; j < n - i - 1; ++j)
    //         {
    //             int tmp = matrix[i][j];
    //             matrix[i][j] = matrix[n - j - 1][i];
    //             matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1]; 
    //             matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1];
    //             matrix[j][n - i - 1] = tmp;
    //         }
    //     }
    // }

    // 法二：矩阵变换，先转置，后镜像
    void rotate(vector<vector<int>>& matrix) {
        int n = matrix.size();
        for(int i = 0; i < n; ++i){
            for(int j = 0; j < i; ++j){ 
                swap(matrix[i][j], matrix[j][i]);
            }
        }
        for(int i = 0; i < n; ++i){
            for(int j = 0; j < n / 2; ++j){ 
                swap(matrix[i][j], matrix[i][n - 1 - j]);
            }
        }
    }
};